package com.fanjun.learning.multithread.Work_Thread_Pattern;

/**
 * <p>工作线程,又叫背景线程</p>
 * <p>clientThread线程用于创建request,并放入channel的request队列中</p>
 * <p>channel中维护类一个工人线程池,当有工作时就工作;没有的时候就等待</p>
 * <p>核心思想:传递的request对象,是一个可执行的对象;工人线程只是从request队列中取出request对象,实际真正执行者是request对象本身;
 * 即工人线程不关心传入的request对象要执行什么操作,只知道它有一个execute方法;这是实现了面向对象编程的多态思想,即可以传递request的子类,都可以执行
 * </p>
 * <p>其次,这里的request的创建和执行被拆分开,那么就可以不在意request的执行顺序,在不同的地方去执行.例如:两台计算机,一台创建request,一台执行</p>
 */
public class Main {
    public static void main(String[] args){
        Channel channel = new Channel(5);
        new ClientThread("fanjun1", channel).start();
        new ClientThread("fanjun2", channel).start();
        new ClientThread("fanjun3", channel).start();
        new ClientThread("fanjun4", channel).start();
        new ClientThread("fanjun5", channel).start();
        channel.startWorks();
    }
}
